#/usr/bin/env python3
#-*- coding: utf-8 -*-

"""
python的类中属性、方法都是可以动态添加的
可以为对象添加方法，是独立于对象的，必须传入self，标识对象本身
可以为类添加方法，是所有对象共享的，无对象，所以无self
这里绑定的类方法，实例无法调用，因为实例调用时会传入self，但是类方法定义中没有self
动态为对象绑定方法，使用types中的Method.type方法

注意，加入__slot__之后，在该程序中就无法再绑定类方法，绑定的依然是对象方法。可以通过
代码的稍作修改验证这个说法。
"""

class Test:
	pass

	#__slots__ = ['name', 'age', 'testMethod']

test = Test()
test.name = 'wowo'
test2 = Test()

def testMethod(self):
	print('this is test method')
	print(self.__class__)

def testClassMethod():
	print('this is Class test method, no need self variable')

from types import MethodType

test.testMethod = MethodType(testMethod, test)
Test.testMethod = testClassMethod

print(test.name)
test.testMethod()
Test.testMethod()
print(dir(test))
print(dir(Test))